<?php

function resetearContador($fichero) {
	setContador($fichero, 0);
}

function incrementarContador($fichero) {
	setContador($fichero, getContador($fichero)+1);
}

function setContador($fichero, $valor) {
	if ($valor == 0 || empty($valor)) {
		escribirContador($fichero, 0);
	} else if (!is_numeric($valor)) {
		throw new SoapFault("Client", "debe enviar un valor numerico");
	} else if ($valor < 0) {
		throw new SoapFault("Client", "el valor debe ser >= 0");
	} else {
		escribirContador($fichero, (int) $valor);
	}
}

function getContador($fichero) {
	$gestor = fopen($fichero, "r");
	if (!$gestor) {
		# Crear contador
		escribirContador($fichero, 0);
		return 0;
	} else {
		$valor = fgets($gestor);
		fclose($gestor);
		return $valor;
	}
}

function escribirContador($fichero, $valor) {
	$gestor = fopen($fichero, "w");
	if (flock($gestor, LOCK_EX)) {
		fputs($gestor, $valor);
		flock($gestor, LOCK_UN);
	} else {
	    echo "¡No se pudo obtener el bloqueo!";
	}
}

$server = new SoapServer(null, array('uri' => ""));
$server->addFunction("resetearContador");
$server->addFunction("incrementarContador");
$server->addFunction("setContador");
$server->addFunction("getContador");
$server->handle();

?>